package asemedashboardview.views; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.Cursors; import org.eclipse.draw2d.Graphics; import org.eclipse.draw2d.Label; import org.eclipse.draw2d.MouseEvent; import org.eclipse.draw2d.MouseListener; import org.eclipse.draw2d.MouseMotionListener; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.swt.graphics.Color; public class HyperlinkFigure extends Label { private ASEMEAction action; private boolean underlined; public HyperlinkFigure(ASEMEAction action) { this.action = action; hookMouse(); } protected void paintFigure(Graphics graphics) { Color color = graphics.getForegroundColor(); if (action.isEnabled()) { graphics.setForegroundColor(ColorConstants.blue); } else { graphics.setForegroundColor(ColorConstants.gray); } super.paintFigure(graphics); if (underlined) { Rectangle bounds = getBounds(); int y = bounds.y + bounds.height - 1; graphics.drawLine(bounds.x, y, bounds.x + bounds.width, y); } graphics.setForegroundColor(color); } protected void hookMouse() { addMouseListener(new MouseListener() { public void mouseDoubleClicked(MouseEvent me) { } public void mousePressed(MouseEvent me) { if (action.isEnabled()) { action.run(); } } public void mouseReleased(MouseEvent me) { } }); addMouseMotionListener(new MouseMotionListener() { public void mouseDragged(MouseEvent me) { } public void mouseEntered(MouseEvent me) { setCursor(Cursors.HAND); underlined = true; repaint(); } public void mouseExited(MouseEvent me) { underlined = false; setCursor(null); repaint(); } public void mouseHover(MouseEvent me) { } public void mouseMoved(MouseEvent me) { } }); } }